// 是否是数组
export function isArray(value: any) {
  return Array.isArray ? Array.isArray(value) : Object.prototype.toString.call(value) === "[object Array]";
}

// 自动引入 assets 中的图片（例如 /assets/images/logo.png）
export function getAssetImage(path: string): string {
  return new URL(`/src/assets/images/${path}`, import.meta.url).href;
}

// 判断空值（null, undefined, '', [], {}）
export function isEmpty(val: any): boolean {
  if (val === null || val === undefined) return true;
  if (typeof val === "string" && val.trim() === "") return true;
  if (Array.isArray(val) && val.length === 0) return true;
  if (typeof val === "object" && Object.keys(val).length === 0) return true;
  return false;
}

// 深拷贝
export function deepClone<T>(obj: T): T {
  return JSON.parse(JSON.stringify(obj));
}

// 下载文件
export function downloadByBlob(data: BlobPart, filename: string): void {
  const blob = new Blob([data]);
  const url = URL.createObjectURL(blob);
  const link = document.createElement("a");
  link.download = filename;
  link.href = url;
  link.click();
  URL.revokeObjectURL(url);
}

// 金额格式化（千分位，保留2位小数）
export function formatMoney(num: number | string, fixed = 2): string {
  if (!num && num !== 0) return "0.00";
  return (+num).toFixed(fixed).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

// 时间格式化（基于 dayjs）
import dayjs from "dayjs";
export function formatDate(date: string | number | Date, format = "YYYY-MM-DD HH:mm:ss"): string {
  return dayjs(date).format(format);
}

// 延迟函数（可用于 async/await 中）
export function sleep(ms: number = 1000): Promise<void> {
  return new Promise(resolve => setTimeout(resolve, ms));
}

/**
 * 生成 UUID v4 字符串
 * @returns {string}
 */
export function generateUUID(): string {
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, c => {
    const r = (Math.random() * 16) | 0;
    const v = c === "x" ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
}
